ECS/Fargate の FireLens で Sumo Logic へログを送ってみた
こんにちは、望月です。
最近リリースされた FireLens により、ECS/Fargate タスクのログ出力先が柔軟に選択できるようになりました。
この FireLens を利用し、Sumo Logic に直接ログを取り込むようにしてみたのでご紹介します。
FireLens については下記ブログで紹介しているため、ここでは Sumo Logic の部分にフォーカスし、説明していきたいと思います。
やってみた
ホスト型コレクタの作成
FireLens からのログ送信先として利用するホスト型コレクタの作成します。
- "Manage Data" -> "Collection" を選択
- 右上に表示された "Add Collector" を選択
- "Hosted Collector" を選択し、作成
- "HTTP Logs & Metrics" を選択し、作成
- 作成後、発行されたHTTPソースアドレスをメモる
- 発行したHTTPソースアドレスは Fargate のログドライバー設定で必要となります。
これで Sumo Logic 側は準備完了となります。簡単ですね!
タスク定義の作成
ECS のタスク定義を作成していきます。
紹介した弊社ブログにも記載されていましたが、現在 FireLens の設定をするためにはコンソールからはできないため JSON を用意し、AWS CLI やコンソールから直接 JSON を流す必要があります。
AWS CLI から流し込むときは、バージョンが最新ではない場合はエラーとなる可能性があるため、注意してください。
- 以下は自身の環境に合わせ、変更してください。
- ``
- ``
- ``
{ "family": "firelens-sumologic-fargate", "executionRoleArn": "arn:aws:iam:::role/ecsTaskExecutionRole", "networkMode": "awsvpc", "cpu": "256", "memory": "512", "containerDefinitions": [ { "name": "log_router_sumo", "image": "906394416424.dkr.ecr.ap-northeast-1.amazonaws.com/aws-for-fluent-bit:latest", "essential": true, "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-ecs-fargate-sumo", "awslogs-create-group": true, "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "awslogs-ecs-fargate-sumo" } } }, { "name": "web-app", "image": "httpd:2.4", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo 'FireLens Sumologic Fargate' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "logConfiguration": { "logDriver":"awsfirelens", "options": { "Name": "http", "Host": "", "URI": "/receiver/v1/http/", "Port": "443", "tls": "on", "tls.verify": "off", "Format": "json_lines" } } } ], "requiresCompatibilities": [ "FARGATE" ] }
- Sumo Logic へログ出力する設定部分は以下となります。
- 発行したHTTPソースアドレスのエンドポイントとトークンは以下の形となります。
https:///receiver/v1/http/
- 以下は自身の環境に合わせ、変更してください。
- ``
- ``
"logConfiguration": { "logDriver":"awsfirelens", "options": { "Name": "http", "Host": "", "URI": "/receiver/v1/http/", "Port": "443", "tls": "on", "tls.verify": "off", "Format": "json_lines" } }
ログの確認
立ち上がったコンテナへアクセスを行い、ログが Sumo Logic へ出力されているか確認します。
- "Manage Data" -> "Collection" を選択
- 作成したコレクションから "Open in Log Search" をクリックし、Log Search を開く
- JSON 形式でログが取り込まれていることを確認
まとめ
FireLens を利用し、Sumo Logic にログを取り込むことができました。
今まで ECS/Fargate から Sumo Logic にログを取り込むためには CloudWatch Logs に一旦ログを出力し、Kinesis や Lambda などを利用する必要があったかと思いますが、この方法を使えば CloudWatch Logs を介さず、Sumo Logic にログを取り込むことができます。
ログの用途などによって、Sumo Logic へ直接取り込みたいという場合には、こちらの方法がマッチするかと思いますので、試していただければと思います。